home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d13 / route.arc / ALLOC.C next >
C/C++ Source or Header  |  1989-11-24  |  867b  |  40 lines

  1. #include <stdio.h>
  2.  
  3. #ifndef M_XENIX
  4. #include <stdlib.h>
  5. #include <dos.h>
  6. #else
  7. #include <malloc.h>
  8. #endif
  9.  
  10. char far *Alloc( long );
  11. void Nomem( void );
  12.  
  13. char far *Alloc ( x ) /* allocate x bytes of far memory */
  14.     long x;
  15.     {
  16. #ifndef M_XENIX
  17.  
  18.     union REGS regs;
  19.  
  20.     regs.h.ah = 0x48; /* allocate memory dos call */
  21.     x = (x+15)>>4; /* get number of paragraphs to allocate */
  22.     regs.x.bx = (int)x;
  23.     intdos( ®s, ®s ); /* call dos; request memory */
  24.     if (regs.x.cflag) /* memory allocation error */
  25.         Nomem();
  26.     return( (char far *)((long)regs.x.ax<<16) ); /* make a far pointer */
  27. #else
  28.     char far *fp;
  29.  
  30.     if ((fp = malloc((unsigned int)x)) == (char far *)NULL)
  31.         Nomem();        /* memory allocation error */
  32.     return(fp);
  33. #endif
  34. }
  35.  
  36. void Nomem () { /* a memory allocation request has failed */
  37.     printf( "out of memory\n" );
  38.     exit( -1 );
  39.     }
  40.